package com.qdlc.p2p.dal.dto;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import com.qdlc.p2p.common.constant.Global;
import com.qdlc.p2p.common.util.DateUtil;
import com.qdlc.p2p.common.util.HttpRequestUtil;

/**
 * 红包方案实体
 *
 * @author ylx
 * @version 2.0
 * @since 2015年04月22日 13时52分37秒
 */
@Entity
@Table(name = Global.DB_PREFIX + "additional_red_envelope")
public class RedEnvelope {

    /** 主键 */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    /** 红包名称 */
    private String name;

    /** 状态，是否启用，1启用，0不启用 */
    private byte status;

    /** 发放类型：1现金红包，2虚拟红包 */
    private byte type;

    /** 发放方式：1固定金额，2固定比率，3区间金额，4区间比率 */
    private byte payType;

    /** 固定金额，红包发放方式为固定金额时设置的发放金额 */
    private double amount;

    /** 固定比率，红包发放方式为固定比率时设定 */
    private double rate;

    /** 红包发放的最大金额，红包发放方式为固定比率或者区间比率时设定，0代表不限 */
    private double maxAmount;

    /** 红包发放的最小金额，红包发放方式为固定比率及区间比率时设定，0代表不限 */
    private double minAmount;

    /** 红包的有效期天数，0代表永久 */
    private int validDay;

    /** 红包总数，红包发放数量控制，0代表不限 */
    private int total;

    /** 发放数量，记录该红包已发放数量 */
    private int lssueNum;

    /** 是否删除，1代表已删除，0未删除 */
    private byte isDelete;

    /** 红包描述 */
    private String description;

    /** 红包添加时间 */
    private Date addTime;

    /** 红包添加IP */
    private String addIp;

    public RedEnvelope() {
    }

    /**
     * 固定金额红包
     *
     * @param name        红包名称
     * @param status      红包状态
     * @param type        红包类型
     * @param payType     发放方式
     * @param amount      固定金额
     * @param validDay    有效天数
     * @param total       红包总数
     * @param description 红包描述
     */
    public RedEnvelope(String name, byte status, byte type, byte payType,
                       double amount, int validDay, int total, String description) {
        super();
        this.name = name;
        this.status = status;
        this.type = type;
        this.payType = payType;
        this.amount = amount;
        this.validDay = validDay;
        this.total = total;
        this.description = description;
        this.addTime = DateUtil.getNow();
        this.addIp = Global.getIP();
    }

    /**
     * 固定比例红包
     *
     * @param name        红包名称
     * @param status      红包状态
     * @param type        红包类型
     * @param payType     发放方式
     * @param rate        固定比率
     * @param maxAmount   红包最大金额
     * @param minAmount   红包最小金额
     * @param validDay    有效天数
     * @param total       红包总数
     * @param description 红包描述
     */
    public RedEnvelope(String name, byte status, byte type, byte payType,
                       double rate, double maxAmount, double minAmount, int validDay,
                       int total, String description) {
        super();
        this.name = name;
        this.status = status;
        this.type = type;
        this.payType = payType;
        this.rate = rate;
        this.maxAmount = maxAmount;
        this.minAmount = minAmount;
        this.validDay = validDay;
        this.total = total;
        this.description = description;
        this.addTime = DateUtil.getNow();
        this.addIp = Global.getIP();
    }

    /**
     * 区间金额
     *
     * @param name        红包名称
     * @param status      红包状态
     * @param type        红包类型
     * @param payType     发放方式
     * @param validDay    有效天数
     * @param total       红包总数
     * @param description 红包描述
     */
    public RedEnvelope(String name, byte status, byte type, byte payType,
                       int validDay, int total, String description) {
        super();
        this.name = name;
        this.status = status;
        this.type = type;
        this.payType = payType;
        this.validDay = validDay;
        this.total = total;
        this.description = description;
        this.addTime = DateUtil.getNow();
        this.addIp = Global.getIP();
    }

    /**
     * 区间比例
     *
     * @param name        红包名称
     * @param status      红包状态
     * @param type        红包类型
     * @param payType     发放方式
     * @param maxAmount   红包最大金额
     * @param minAmount   红包最小金额
     * @param validDay    有效天数
     * @param total       红包总数
     * @param description 红包描述
     */
    public RedEnvelope(String name, byte status, byte type, byte payType,
                       double maxAmount, double minAmount, int validDay, int total,
                       String description) {
        super();
        this.name = name;
        this.status = status;
        this.type = type;
        this.payType = payType;
        this.maxAmount = maxAmount;
        this.minAmount = minAmount;
        this.validDay = validDay;
        this.total = total;
        this.description = description;
        this.addTime = DateUtil.getNow();
        this.addIp = Global.getIP();
    }

    /**
     * 获取主键
     *
     * @return 主键
     */
    public long getId() {
        return id;
    }

    /**
     * 设置主键
     *
     * @param id 要设置的主键
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * 获取红包名称
     *
     * @return 红包名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置红包名称
     *
     * @param name 要设置的红包名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取状态，是否启用，1启用，0不启用
     *
     * @return 状态，是否启用，1启用，0不启用
     */
    public byte getStatus() {
        return status;
    }

    /**
     * 设置状态，是否启用，1启用，0不启用
     *
     * @param status 要设置的状态，是否启用，1启用，0不启用
     */
    public void setStatus(byte status) {
        this.status = status;
    }

    /**
     * 获取发放类型，1现金红包，2虚拟红包
     *
     * @return 发放类型 1现金红包，2虚拟红包
     */
    public byte getType() {
        return type;
    }

    /**
     * 设置发放类型，1现金红包，2虚拟红包
     *
     * @param type 要设置的发放类型，1现金红包，2虚拟红包
     */
    public void setType(byte type) {
        this.type = type;
    }

    /**
     * 获取发放方式：1固定金额，2固定比率，3区间金额，4区间比率
     *
     * @return 发放方式：1固定金额，2固定比率，3区间金额，4区间比率
     */
    public byte getPayType() {
        return payType;
    }

    /**
     * 设置发放方式：1固定金额，2固定比率，3区间金额，4区间比率
     *
     * @param payType 要设置的发放方式：1固定金额，2固定比率，3区间金额，4区间比率
     */
    public void setPayType(byte payType) {
        this.payType = payType;
    }

    /**
     * 获取固定金额，红包发放方式为固定金额时设置的发放金额
     *
     * @return 固定金额，红包发放方式为固定金额时设置的发放金额
     */
    public double getAmount() {
        return amount;
    }

    /**
     * 设置固定金额，红包发放方式为固定金额时设置的发放金额
     *
     * @param amount 要设置的固定金额，红包发放方式为固定金额时设置的发放金额
     */
    public void setAmount(double amount) {
        this.amount = amount;
    }

    /**
     * 获取固定比率，红包发放方式为固定比率时设定
     *
     * @return 固定比率，红包发放方式为固定比率时设定
     */
    public double getRate() {
        return rate;
    }

    /**
     * 设置固定比率，红包发放方式为固定比率时设定
     *
     * @param rate 要设置的固定比率，红包发放方式为固定比率时设定
     */
    public void setRate(double rate) {
        this.rate = rate;
    }

    /**
     * 获取红包发放的最大金额，红包发放方式为固定比率或者区间比率时设定，0代表不限
     *
     * @return 红包发放的最大金额，红包发放方式为固定比率或者区间比率时设定，0代表不限
     */
    public double getMaxAmount() {
        return maxAmount;
    }

    /**
     * 设置红包发放的最大金额，红包发放方式为固定比率或者区间比率时设定，0代表不限
     *
     * @param maxAmount 要设置的红包发放的最大金额，红包发放方式为固定比率或者区间比率时设定，0代表不限
     */
    public void setMaxAmount(double maxAmount) {
        this.maxAmount = maxAmount;
    }

    /**
     * 获取红包发放的最小金额，红包发放方式为固定比率及区间比率时设定，0代表不限
     *
     * @return 红包发放的最小金额，红包发放方式为固定比率及区间比率时设定，0代表不限
     */
    public double getMinAmount() {
        return minAmount;
    }

    /**
     * 设置红包发放的最小金额，红包发放方式为固定比率及区间比率时设定，0代表不限
     *
     * @param minAmount 要设置的红包发放的最小金额，红包发放方式为固定比率及区间比率时设定，0代表不限
     */
    public void setMinAmount(double minAmount) {
        this.minAmount = minAmount;
    }

    /**
     * 获取红包的有效期天数，0代表永久
     *
     * @return 红包的有效期天数，0代表永久
     */
    public int getValidDay() {
        return validDay;
    }

    /**
     * 设置红包的有效期天数，0代表永久
     *
     * @param validDay 要设置的红包的有效期天数，0代表永久
     */
    public void setValidDay(int validDay) {
        this.validDay = validDay;
    }

    /**
     * 获取红包总数，红包发放数量控制，0代表不限
     *
     * @return 红包总数，红包发放数量控制，0代表不限
     */
    public int getTotal() {
        return total;
    }

    /**
     * 设置红包总数，红包发放数量控制，0代表不限
     *
     * @param total 要设置的红包总数，红包发放数量控制，0代表不限
     */
    public void setTotal(int total) {
        this.total = total;
    }

    /**
     * 获取发放数量，记录该红包已发放数量
     *
     * @return 发放数量，记录该红包已发放数量
     */
    public int getLssueNum() {
        return lssueNum;
    }

    /**
     * 设置发放数量，记录该红包已发放数量
     *
     * @param lssueNum 要设置的发放数量，记录该红包已发放数量
     */
    public void setLssueNum(int lssueNum) {
        this.lssueNum = lssueNum;
    }

    /**
     * 获取是否删除，1代表已删除，0未删除
     *
     * @return 是否删除，1代表已删除，0未删除
     */
    public byte getIsDelete() {
        return isDelete;
    }

    /**
     * 设置是否删除，1代表已删除，0未删除
     *
     * @param isDelete 要设置的是否删除，1代表已删除，0未删除
     */
    public void setIsDelete(byte isDelete) {
        this.isDelete = isDelete;
    }

    /**
     * 获取红包描述
     *
     * @return 红包描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置红包描述
     *
     * @param description
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * 获取红包添加时间
     *
     * @return 红包添加时间
     */
    public Date getAddTime() {
        return addTime;
    }

    /**
     * 设置红包添加时间
     *
     * @param addTime 要设置的红包添加时间
     */
    public void setAddTime(Date addTime) {
        this.addTime = addTime;
    }

    /**
     * 获取红包添加IP
     *
     * @return 红包添加IP
     */
    public String getAddIp() {
        return addIp;
    }

    /**
     * 设置红包添加IP
     *
     * @param addIp 要设置的红包添加IP
     */
    public void setAddIp(String addIp) {
        this.addIp = addIp;
    }
}
